//package com.yfeng.security;
//
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.dao.DataAccessException;
//import org.springframework.security.userdetails.UserDetails;
//import org.springframework.security.userdetails.UserDetailsService;
//import org.springframework.security.userdetails.UsernameNotFoundException;
//import org.springframework.stereotype.Service;
//
//import com.yfeng.common.dao.IDao;
//import com.yfeng.common.dao.Param;
//
//import com.yfeng.security.entity.User;
//
//
///**
// * 一个UserDetailsService的实现类
// * User:raoqn
// * Date: 2009-2-5
// * Time: 13:41:09
// */
//@Service("securityManager")
//public class SecurityManager implements UserDetailsService {
//	private static final Log log = LogFactory.getLog(SecurityManager.class);
//    @Autowired
//    public IDao baseDao;
//
//    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException,
//            DataAccessException {
//        User user = new User();
//        Param param = new Param("username", s);
//        List l = null;
//		try {
//			l = baseDao.query("from users where username=:username", param);
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			log.error(e.getMessage(),e);
//		}
//        if (l.size() > 0) {
//            String[] roleArray = getRolesByUsername(s);//取出用户对应的角色
//            Map row = (Map) l.get(0);
//            String username = (String) row.get("username");
//            String passwd = (String) row.get("passwd");
//            Integer islock = (Integer) row.get("islock");
//            user.setUsername(username);
//            user.setPasswd(passwd);
//            user.setEnable(getEnable(islock));
//            user.setRoles(roleArray);
//        }
//        return user;
//    }
//
//    /**
//     * 根据锁状态转换成BOOLEAN类型
//     *
//     * @param isLock 用户锁的状态,0,unlock,1,lock
//     * @return Boolean
//     */
//    private Boolean getEnable(Integer isLock) {
//        if (isLock.intValue() == 0)
//            return true;
//        else
//            return false;
//    }
//
//    /**
//     * 通过用户名取相应的角色列表
//     *
//     * @param username 用户名
//     * @return 包含角色的数组
//     */
//    public String[] getRolesByUsername(String username) {
//    	 String[] rets =null;
//    	try {
//        Param param = new Param("username", username);
//        List l;
//
//			l = baseDao.query("select r.rolename from users u,user_role ur,sys_roles r where u.username=:username and u.id=ur.userid and ur.roleid=r.id ", param);
//
//        rets = new String[l.size()];
//        for (int i = 0; i < l.size(); i++) {
//            Map row = (Map) l.get(i);
//            String rolename = (String) row.get("rolename");
//            log.info("######username:" + username + "----roles:" + rolename);
//            rets[i] = rolename;
//        }
//
//    	} catch (Exception e) {
//			log.error(e.getMessage(),e);
//		}
//    	 return rets;
//    }
//
//    /**
//     * 取出用户所有能访问的资源
//     *
//     * @param username 用户名
//     * @return
//     */
//    public String[] getResourcesByUsername(String username) {
//        Param param = new Param("username", username);
//        List l = null;
//		try {
//			l = baseDao.query("select sr.* from users u,user_role ur,sys_resources sr where u.username=:username and u.id=ur.userid and ur.roleid=sr.roleid and sr.type='URL'  ", param);
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			log.error(e.getMessage(),e);
//		}
//        String[] rets = new String[l.size()];
//        for (int i = 0; i < l.size(); i++) {
//            Map row = (Map) l.get(i);
//            String resourceValue = (String) row.get("value");
//            log.info("######username:" + username + "----resource:" + resourceValue);
//            rets[i] = resourceValue;
//        }
//        return rets;
//    }
//
//    /**
//     * 该方法实现了ISecurityManager接口
//     * 在容器运行时候把资源以及角色载入缓存，这样以后每访问一个页面验证时候不用再查询数据。
//     *
//     * @return 一个Map对象，{url,"role1,role2.."}
//     */
//    public Map loadUrlAndRoleToCache() {
//        Map<String, String> m = new HashMap<String, String>();
//        List l = null;
//		try {
//			l = baseDao.query("select sr.value,r.rolename from sys_resources sr,sys_roles r where sr.roleid= r.id");
//		} catch (Exception e) {
//			// TODO Auto-generated catch block
//			log.error(e.getMessage(),e);
//		}
//       // Resource res = new Resource();
//
//        for (int i = 0; i < l.size(); i++) {
//            Map row = (Map) l.get(i);
//            String url = ((String) row.get("value")).toLowerCase();
//          //  res.setValue(url);
//           // String roles = res.getRoles(baseDao);
//            String roles="";
//            m.put(url, roles);
//        }
//        log.info("载入:" + m);
//
//        return m;
//    }
//
//
//}
